/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.sadhar.sipp.perekamansubkelompokanggaran;

import java.util.List;
import java.util.Map;
import org.sadhar.errhandler.ClassAntiNull;
import org.sadhar.sia.framework.ClassApplicationModule;
import org.sadhar.sipp.jenisbiaya.JenisBiaya;
import org.sadhar.sipp.jenisbiaya.JenisBiayaDAO;
import org.sadhar.sipp.jenisbiaya.JenisBiayaDAOImpl;
import org.sadhar.sipp.kelompokbiaya.KelompokBiaya;
import org.sadhar.sipp.kelompokbiaya.KelompokBiayaDAO;
import org.sadhar.sipp.kelompokbiaya.KelompokBiayaDAOImpl;
import org.sadhar.sipp.posbiaya.PosBiayaDAO;
import org.sadhar.sipp.posbiaya.PosBiayaDAOImpl;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zul.Button;
import org.zkoss.zul.Checkbox;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.Comboitem;
import org.zkoss.zul.Label;
import org.zkoss.zul.ListModel;
import org.zkoss.zul.Listbox;
import org.zkoss.zul.Listcell;
import org.zkoss.zul.Listitem;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Space;
import org.zkoss.zul.Textbox;
import org.zkoss.zul.Toolbarbutton;
import org.zkoss.zul.Window;

/**
 *
 * @author bloodrunk
 */
public class PerekamanSubKelompokAnggaranWnd extends ClassApplicationModule {

    private Textbox txtboxIdJenisBiaya;
    private Textbox txtboxIdTahunKelompokAnggaran;
    private Textbox txtboxKodeKelompokBiaya;
    private Textbox txtboxIdPosBiaya;
    private Textbox txtboxKeySearch;
    private Textbox txtboxKodeGL1;
    private Textbox txtboxKodeGL2;
    private Textbox txtboxKodeGL3;
    private Textbox txtboxKodeGL4;
    private Listbox lstboxDaftarPos;
    private Listbox lstSubKelompokBiaya;
    private Combobox cmbboxJenisBiaya;
    private Combobox cmbboxTahunKelompokAnggaran;
    private Label lblNamaPosBiaya;
    private Label lblJenisAnggaran;
    private Label lblKelompokPengurusBiaya;
    private Label lblStatusKelompokBiaya;
    private JenisBiayaDAO jenisBiayaDAO;
    private KelompokBiayaDAO kelompokBiayaDAO;
    private PosBiayaDAO posBiayaDAO;
    private PerekamanSubKelompokAnggaranDAO perekamanSubKelompokAnggaranDAO;
    private ListModel modelKelompokAnggaran1;
    private ListModel modelKelompokAnggaran2;
    private Button btnSimpan;
    private int index = 0;
    private int checkboxIndex = 0;
    private int posBiayaIdIndex = 0;
    private Boolean simpan = true;

    public PerekamanSubKelompokAnggaranWnd() {
        jenisBiayaDAO = new JenisBiayaDAOImpl();
        kelompokBiayaDAO = new KelompokBiayaDAOImpl();
        posBiayaDAO = new PosBiayaDAOImpl();
        perekamanSubKelompokAnggaranDAO = new PerekamanSubKelompokAnggaranDAOImpl();
    }

    public void onCreate() throws Exception {
        txtboxIdPosBiaya = (Textbox) getFellow("txtboxIdPosBiaya");
        txtboxIdJenisBiaya = (Textbox) getFellow("txtboxIdJenisBiaya");
        txtboxIdTahunKelompokAnggaran = (Textbox) getFellow("txtboxIdTahunKelompokAnggaran");
        txtboxKeySearch = (Textbox) getFellow("txtboxKeySearch");
        txtboxKodeKelompokBiaya = (Textbox) getFellow("txtboxKodeKelompokBiaya");
        cmbboxJenisBiaya = (Combobox) getFellow("cmbboxJenisBiaya");
        cmbboxTahunKelompokAnggaran = (Combobox) getFellow("cmbboxTahunKelompokAnggaran");
        txtboxKodeGL1 = (Textbox) getFellow("txtboxKodeGL1");
        txtboxKodeGL2 = (Textbox) getFellow("txtboxKodeGL2");
        txtboxKodeGL3 = (Textbox) getFellow("txtboxKodeGL3");
        txtboxKodeGL4 = (Textbox) getFellow("txtboxKodeGL4");
        lblNamaPosBiaya = (Label) getFellow("lblNamaPosBiaya");
        lblJenisAnggaran = (Label) getFellow("lblJenisAnggaran");
        lblKelompokPengurusBiaya = (Label) getFellow("lblKelompokPengurusBiaya");
        lblStatusKelompokBiaya = (Label) getFellow("lblStatusKelompokBiaya");
        lstboxDaftarPos = (Listbox) getFellow("lstboxDaftarPos");
        lstSubKelompokBiaya = (Listbox) getFellow("lstboxSubKelompokBiaya");
        btnSimpan = (Button) getFellow("btnSimpan");
        clear();
        loadJenisBiaya();
        //loadSubKelompokBiaya();
        //loadTahunKelompokAnggaran();
    }

    public void clear() {
        txtboxKeySearch.setValue("");
        txtboxIdJenisBiaya.setValue("");
        txtboxIdPosBiaya.setValue("");
        txtboxIdTahunKelompokAnggaran.setValue("");
        txtboxKeySearch.setValue("");
        txtboxKodeGL1.setValue("");
        cmbboxTahunKelompokAnggaran.setValue("");

    }

    public void loadJenisBiaya() throws Exception {
        cmbboxJenisBiaya.getItems().clear();
        for (JenisBiaya jenisBiaya : jenisBiayaDAO.list()) {
            Comboitem item = new Comboitem();
            item.setValue(jenisBiaya);
            item.setLabel(jenisBiaya.getNamaJenisBiaya());
            cmbboxJenisBiaya.appendChild(item);
        }

    }

    public void loadSubKelompokBiaya() throws Exception {
        lstSubKelompokBiaya.getItems().clear();
        KelompokBiaya kelompokBiaya = (KelompokBiaya) cmbboxTahunKelompokAnggaran.getSelectedItem().getValue();
        for (final Map subKelompok : perekamanSubKelompokAnggaranDAO.listDetail(kelompokBiaya.getTahunKelompok())) {
            Listitem item1 = new Listitem();
            item1.setValue(subKelompok);
            item1.appendChild(new Listcell(subKelompok.get("kelompokBiaya").toString()));
            item1.appendChild(new Listcell());
            item1.appendChild(new Listcell(subKelompok.get("subKelompokBiaya").toString()));
            Listcell listcell = new Listcell();
            if (!ClassAntiNull.AntiNullString(subKelompok.get("kelompokBiaya")).trim().equalsIgnoreCase("")) {
                Toolbarbutton toolbarbtnUbah = new Toolbarbutton();
                toolbarbtnUbah.setLabel("[ubah]");
                toolbarbtnUbah.addEventListener("onClick", new EventListener() {

                    public void onEvent(Event arg0) throws Exception {
                        cmbboxJenisBiaya.setDisabled(true);
                        cmbboxTahunKelompokAnggaran.setDisabled(true);
                        txtboxKeySearch.setDisabled(true);
                        cmbboxJenisBiaya.setValue(ClassAntiNull.AntiNullString(subKelompok.get("jenisBiaya")));
                        cmbboxTahunKelompokAnggaran.setValue(ClassAntiNull.AntiNullString(subKelompok.get("tahunKelompok")));
                        txtboxIdTahunKelompokAnggaran.setValue(subKelompok.get("tahunKelompok").toString());
                        txtboxKodeKelompokBiaya.setValue(subKelompok.get("kodeKelompokBiaya").toString());
                        txtboxKeySearch.setValue(subKelompok.get("kelompokBiaya").toString());
                        lblNamaPosBiaya.setValue((String) subKelompok.get("kelompokBiaya"));
                        lblJenisAnggaran.setValue((String) subKelompok.get("jenisBiaya"));
                        lblStatusKelompokBiaya.setValue((String) subKelompok.get("isMutlak"));
                        lblKelompokPengurusBiaya.setValue((String) subKelompok.get("kelompokPengurusBiaya"));
                        txtboxIdJenisBiaya.setValue(subKelompok.get("kodeJenisBiaya").toString());
                        txtboxIdPosBiaya.setValue(subKelompok.get("kodeKelompokBiaya").toString());
                        //Listbox baru pada saat ubah di klik
                        System.out.println("Master : " + subKelompok.get("kodeKelompokBiaya"));
                        lstboxDaftarPos.getItems().clear();
                        for (Map posBiaya : perekamanSubKelompokAnggaranDAO.getPosBiaya(Integer.valueOf(subKelompok.get("kodeKelompokBiaya").toString()))) {
                            Listitem item = new Listitem();
                            item.setValue(posBiaya);
                            Checkbox checkbox = new Checkbox();
                            checkbox.setChecked(false);
                            checkbox.setId(posBiaya.get("kodePosBiaya").toString());
                            //System.out.println("Master : " + posBiaya.get("kodePosBiaya") + " : " + subKelompok.get("kodeKelompokBiaya"));
                            for (Map posIn : perekamanSubKelompokAnggaranDAO.getPosBiaya(Integer.valueOf(subKelompok.get("kodeKelompokBiaya").toString()), subKelompok.get("tahunKelompok").toString())) {
                                if (posIn.get("kodePosBiaya").toString().equals(posBiaya.get("kodePosBiaya").toString())) {
                                    checkbox.setChecked(true);
                                }
                            }
                            Listcell listcell = new Listcell();
                            listcell.appendChild(checkbox);
                            item.appendChild(listcell);
                            item.appendChild(new Listcell(posBiaya.get("namaPosBiaya").toString()));
                            lstboxDaftarPos.appendChild(item);

                        }


                    }
                });

                listcell.appendChild(toolbarbtnUbah);
                listcell.appendChild(new Space());
                item1.appendChild(listcell);

            }
            lstSubKelompokBiaya.appendChild(item1);


        }
    }

    public void loadTahunKelompokAnggaran() throws Exception {
        cmbboxTahunKelompokAnggaran.getItems().clear();
        for (KelompokBiaya kelompokBiaya : kelompokBiayaDAO.listDistinct()) {
            Comboitem item = new Comboitem();
            item.setValue(kelompokBiaya);
            item.setLabel(kelompokBiaya.getTahunKelompok());
            cmbboxTahunKelompokAnggaran.appendChild(item);
        }
    }

    public void cmbboxJenisBiayaOnSelect() throws Exception {
        JenisBiaya jenisBiaya = (JenisBiaya) cmbboxJenisBiaya.getSelectedItem().getValue();
        txtboxIdJenisBiaya.setValue(jenisBiaya.getKodeJenisBiaya() + "");
        lblJenisAnggaran.setValue(jenisBiaya.getNamaJenisBiaya());
        loadTahunKelompokAnggaran();
    }

    public void cmbboxTahunKelompokAnggaranOnSelect() throws Exception {
        KelompokBiaya kelompokBiaya = (KelompokBiaya) cmbboxTahunKelompokAnggaran.getSelectedItem().getValue();
        txtboxIdTahunKelompokAnggaran.setValue(kelompokBiaya.getTahunKelompok() + "");
        txtboxKodeGL1.setValue(String.valueOf(kelompokBiaya.getKodeGL2()));
        txtboxKodeGL2.setValue(String.valueOf(kelompokBiaya.getKodeGL3()));
        txtboxKodeGL3.setValue(String.valueOf(kelompokBiaya.getKodeGL4()));
        loadSubKelompokBiaya();

    }

    public void btnCariOnClick() throws Exception {
        if (txtboxIdJenisBiaya.getValue().isEmpty() || cmbboxTahunKelompokAnggaran.getValue().isEmpty()) {
            Messagebox.show("Masukan Tahun Kelompok", "Pesan Kesalahan", Messagebox.OK, Messagebox.ERROR);
        } else {
            final Window win = (Window) Executions.createComponents("sippzul/perekamansubkelompokanggaran/popup.zul", this, null);
            Textbox txtboxSearch = (Textbox) win.getFellow("txtboxSearch");
            txtboxSearch.setValue(txtboxKeySearch.getValue());
            win.doModal();
        }
    }

    public void btnSimpanOnClick() throws InterruptedException, Exception {
        PerekamanSubKelompokAnggaran perekamanSubKelompokAnggaran = new PerekamanSubKelompokAnggaran();

        if (txtboxIdJenisBiaya.getValue().equalsIgnoreCase("") || txtboxIdTahunKelompokAnggaran.getValue().equalsIgnoreCase("") ||
                txtboxIdPosBiaya.getValue().equalsIgnoreCase("")) {
            Messagebox.show("Data Ada Yang Kosong", "Pesan Kesalahan", Messagebox.OK, Messagebox.ERROR);
        } else {
            //List<Map> result = perekamanSubKelompokAnggaranDAO.listDetail(txtboxIdTahunKelompokAnggaran.getValue());
            List<Map> resultAllPos = perekamanSubKelompokAnggaranDAO.getPosBiaya(Integer.valueOf(txtboxIdPosBiaya.getValue().toString()));
            Checkbox chkboxPilih = null;

            try {
                for (Map master : resultAllPos) {
                    chkboxPilih = (Checkbox) getFellow(master.get("kodePosBiaya").toString());
                    chkboxPilih.setId(master.get("kodePosBiaya").toString());
                    System.out.println(master.get("kodePosBiaya").toString());
                    Boolean cekData = perekamanSubKelompokAnggaranDAO.cekData(Integer.valueOf(txtboxIdPosBiaya.getValue().toString()),
                            Integer.valueOf(master.get("kodePosBiaya").toString()));
                    if (chkboxPilih.isChecked() && !cekData) {
                        System.out.println("Simpan Dijalankan" + chkboxPilih.getId());
                        perekamanSubKelompokAnggaran.setKodePosBiaya(Integer.valueOf(chkboxPilih.getId().toString()));
                        perekamanSubKelompokAnggaran.setKodeKelompokBiaya(Integer.valueOf(txtboxIdPosBiaya.getValue().toString()));
                        perekamanSubKelompokAnggaran.setIsMutlak(lblStatusKelompokBiaya.getValue());
                        perekamanSubKelompokAnggaranDAO.insert(perekamanSubKelompokAnggaran);
                    }
                    if (chkboxPilih.isChecked() == false && cekData) {
                        System.out.println("Hapus Dijalankan" + chkboxPilih.getId());
                        perekamanSubKelompokAnggaran.setKodePosBiaya(Integer.valueOf(chkboxPilih.getId().toString()));
                        perekamanSubKelompokAnggaran.setKodeKelompokBiaya(Integer.valueOf(txtboxIdPosBiaya.getValue().toString()));
                        perekamanSubKelompokAnggaranDAO.delete(perekamanSubKelompokAnggaran);
                    }
                }

                Messagebox.show("Data telah disimpan", "Informasi", Messagebox.OK, Messagebox.INFORMATION);
            } catch (Exception e) {
                System.out.println(e.getMessage());
                Messagebox.show("Data Tidak Dapat Dimasukan", "Pesan Kesalahan", Messagebox.OK, Messagebox.ERROR);
            }
            loadSubKelompokBiaya();
            clearlstboxDaftarPos();
        }
    }

    public void btnBatalOnClick() throws Exception {
        cmbboxJenisBiaya.setDisabled(false);
        cmbboxTahunKelompokAnggaran.setDisabled(false);
        txtboxKeySearch.setDisabled(false);
        cmbboxTahunKelompokAnggaran.getItems().clear();
        loadJenisBiaya();
        clearlstboxDaftarPos();
    }

    public void clearlstboxDaftarPos() {
        lstboxDaftarPos.getItems().clear();
        cmbboxJenisBiaya.setValue("");
        //cmbboxTahunKelompokAnggaran.getItems().clear();
        cmbboxTahunKelompokAnggaran.setValue("");
        txtboxIdJenisBiaya.setValue("");
        txtboxIdTahunKelompokAnggaran.setValue("");
        txtboxKeySearch.setValue("");
        txtboxIdPosBiaya.setValue("");
        txtboxKodeKelompokBiaya.setValue("");
        lblNamaPosBiaya.setValue("");
        lblJenisAnggaran.setValue("");
        lblStatusKelompokBiaya.setValue("");
        lblKelompokPengurusBiaya.setValue("");

    }

    public void lstboxSubKelompokBiayaOnSelect() {
        cmbboxJenisBiaya.setDisabled(true);
        cmbboxTahunKelompokAnggaran.setDisabled(true);
        txtboxKeySearch.setDisabled(true);
        Map map = (Map) lstSubKelompokBiaya.getSelectedItem().getValue();
        cmbboxJenisBiaya.setValue(ClassAntiNull.AntiNullString(map.get("jenisBiaya")));
        cmbboxTahunKelompokAnggaran.setValue(ClassAntiNull.AntiNullString(map.get("tahunKelompok")));
        if (map.get("kelompokBiaya").toString().equals("")) {
            txtboxKeySearch.setValue(map.get("hidden").toString());
        } else {
            txtboxKeySearch.setValue(map.get("kelompokBiaya").toString());
        }
        lblNamaPosBiaya.setValue(txtboxKeySearch.getValue());
        lblJenisAnggaran.setValue((String) map.get("jenisBiaya"));
        lblStatusKelompokBiaya.setValue((String) map.get("isMutlak"));
        lblKelompokPengurusBiaya.setValue((String) map.get("kelompokPengurusBiaya"));

    }
}
